{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6b41fee0-5ee5-42ea-b751-6f5b3d978fd2",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Programs\\miniconda3\\envs\\lc_qwen\\lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n",
      "C:\\Users\\gzwjq\\AppData\\Local\\Temp\\ipykernel_24832\\1588234404.py:12: LangChainDeprecationWarning: The class `Chroma` was deprecated in LangChain 0.2.9 and will be removed in 1.0. An updated version of the class exists in the :class:`~langchain-chroma package and should be used instead. To use it run `pip install -U :class:`~langchain-chroma` and import as `from :class:`~langchain_chroma import Chroma``.\n",
      "  vectordb = Chroma(\n"
     ]
    }
   ],
   "source": [
    "from langchain.vectorstores import Chroma\n",
    "from langchain_huggingface import HuggingFaceEmbeddings\n",
    "import os\n",
    "\n",
    "# 定义 Embeddings\n",
    "embeddings = HuggingFaceEmbeddings(model_name=\"m3e-base\")\n",
    "\n",
    "# 向量数据库持久化路径\n",
    "persist_directory = 'data_base/chroma'\n",
    "\n",
    "# 加载数据库\n",
    "vectordb = Chroma(\n",
    "    persist_directory=persist_directory, \n",
    "    embedding_function=embeddings\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "067e1ff2-5390-4a06-9736-2f31a868d5bf",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.environ[\"DASHSCOPE_API_KEY\"] = 'sk-****'\n",
    "\n",
    "from langchain_community.llms import Tongyi\n",
    "llm = Tongyi()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "22030ea2-3414-4431-bfb8-aebcf8fab04e",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "from langchain.prompts import PromptTemplate\n",
    "\n",
    "# 我们所构造的 Prompt 模板\n",
    "template = \"\"\"使用以下上下文来回答最后的问题。如果你不知道答案，就说你不知道，不要试图编造答案。尽量使答案简明扼要。”。\n",
    "{context}\n",
    "问题: {question}\n",
    "有用的回答:\"\"\"\n",
    "\n",
    "# 调用 LangChain 的方法来实例化一个 Template 对象，该对象包含了 context 和 question 两个变量，在实际调用时，这两个变量会被检索到的文档片段和用户提问填充\n",
    "QA_CHAIN_PROMPT = PromptTemplate(input_variables=[\"context\",\"question\"],template=template)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "5f656cc7-01da-42bc-a2e4-bc159a5a4298",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "from langchain.chains import RetrievalQA\n",
    "\n",
    "qa_chain = RetrievalQA.from_chain_type(llm,retriever=vectordb.as_retriever(),return_source_documents=True,chain_type_kwargs={\"prompt\":QA_CHAIN_PROMPT})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "0e1f5e58-ac3b-4843-8121-dd4b5dae4bdf",
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "大模型回答 question 的结果：\n",
      "上海华铭智能终端设备股份有限公司（简称“华铭智能”）是一家在深圳证券交易所上市的公司，股票代码为300462。作为一家上市公司，其股东构成包括机构投资者和个人投资者。具体的股东信息，特别是主要股东和持股比例，通常会在公司的定期报告中披露，如年报、季报等。\n",
      "\n",
      "如果您需要了解最新的股东信息，建议直接访问深圳证券交易所官方网站或华铭智能的官方网站，查找最新的公告和财务报告。此外，一些专业的金融资讯网站也会提供此类信息的查询服务。请注意，由于市场交易活动，股东名单可能会频繁变动，因此获取的信息应该是最近期的官方数据。\n"
     ]
    }
   ],
   "source": [
    "question = \"上海华铭智能终端设备股份有限公司的股东有哪些人？\"\n",
    "# 仅 LLM 回答效果\n",
    "result = llm(question)\n",
    "print(\"大模型回答 question 的结果：\")\n",
    "print(result)\n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "6ade608f-a1b0-4d55-bc82-0d91ab0a0178",
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "检索问答链回答 question 的结果：\n",
      "根据提供的信息，上海华铭智能终端设备股份有限公司的部分股东包括张亮、谢根方、蔡红梅、冯国祚、陆英、徐剑平、吴立钊、张晓燕、季新华、高彬，他们同时担任公司的董事、监事和高级管理人员。其他具体的股东信息未在提供的文本中提及。\n"
     ]
    }
   ],
   "source": [
    "result = qa_chain({\"query\": question})\n",
    "print(\"检索问答链回答 question 的结果：\")\n",
    "print(result[\"result\"])\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "013d3953-fe30-4f88-b73c-3e851d3ec199",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'query': '上海华铭智能终端设备股份有限公司的股东有哪些人？',\n",
       " 'result': '根据提供的信息，上海华铭智能终端设备股份有限公司的部分股东包括张亮、谢根方、蔡红梅、冯国祚、陆英、徐剑平、吴立钊、张晓燕、季新华、高彬，他们同时担任公司的董事、监事和高级管理人员。其他具体的股东信息未在提供的文本中提及。',\n",
       " 'source_documents': [Document(metadata={'source': 'financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt'}, page_content='financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt第二节 概览 ..................................................... 23\\n一、发行人简要情况 ....................................................................................... 23\\n二、公司控股股东及实际控制人简介 .............................................................. 25\\n三、发行人的主要财务数据及财务指标 .......................................................... 25financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt'),\n",
       "  Document(metadata={'source': 'financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt'}, page_content='financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt八、技术与研发情况 ..................................................................................... 150\\n九、境外经营及境外资产情况 ...................................................................... 154\\n十、公司发行当年和未来三年的发展规划及拟采取的措施 ........................... 154\\n第七节 同业竞争与关联交易 ...................................... 160financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt'),\n",
       "  Document(metadata={'source': 'financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt'}, page_content='financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt股票上市之日起十二个月内，不转让或委托他人管理首次公开发行股票前其持有\\n的发行人股份，也不由发行人回购该部分股份。\\n6、作为公司董事、监事和高级管理人员的股东张亮、谢根方、蔡红梅、冯\\n国祚、陆英、徐剑平、吴立钊、张晓燕、季新华、高彬承诺：在其担任公司董事、\\n监事和高级管理人员期间，每年转让的股份不超过其直接和间接持有发行人股份\\n总数的 25%；离职后六个月内，不转让其直接和间接持有的发行人股份；离职\\n六个月后的十二个月内转让其直接或间接持有的发行人股份不超过该部分股份\\n总数的 50%；在发行人首次公开发行股票上市之日起六个月内申报离职的，自\\n申报离职之日起十八个月内不转让其直接持有的发行人股份；在发行人首次公开\\n发行股票上市之日起第七个月至第十二个月之间申报离职的，自申报离职之日起financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt'),\n",
       "  Document(metadata={'source': 'financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt'}, page_content='financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt六、主要固定资产及无形资产情况 ............................................................... 145\\n七、公司拥有的特许经营权 .......................................................................... 150\\n八、技术与研发情况 ..................................................................................... 150financial_dataset\\\\上海华铭智能终端设备股份有限公司.txt')]}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "lc_qwen",
   "language": "python",
   "name": "lc_qwen"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
